project(
  'mate-terminal', 'c',
  version: '1.25.0',
  meson_version: '>=0.47.0',
  license: 'GPL2',
  default_options : [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11'],
)

package_name = meson.project_name()
package_version = meson.project_version()

# Versionning
version_arr = package_version.split('.')
version_major = version_arr[0].to_int()
version_minor = version_arr[1].to_int()
version_micro = version_arr[2].to_int()

package_string = '@0@ @1@.0'.format(package_name, package_version)

config_h = configuration_data()
config_h.set_quoted('PACKAGE', package_name, description: 'Name of package')
config_h.set_quoted('PACKAGE_NAME', package_name, description: 'Define to the full name of this package.')
config_h.set_quoted('PACKAGE_STRING', package_string, description: 'Define to the full name and version of this package.')
config_h.set_quoted('PACKAGE_VERSION', package_version, description: 'Define to the version of this package.')
config_h.set_quoted('PACKAGE_URL', 'https://mate-desktop.org', description: 'Define to the home page for this package.')
config_h.set_quoted('GETTEXT_PACKAGE', package_name, description: 'Gettext package')
config_h.set_quoted('VERSION', package_version, description: 'Name of package')

# Compiler & Project arguments
add_project_arguments([
  '-DHAVE_CONFIG_H',
  '-I' + meson.build_root(),
  ], language: 'c')

# get suported warning flags
test_args = [
  #'-fstack-protector-strong',
  #'-Waggregate-return',
  #'-Warray-bounds',
  '-Wcast-align',
  '-Wchar-subscripts',
  #'-Wclobbered',
  #'-Wdeclaration-after-statement',
  #'-Wempty-body',
  #'-Wextra',
  #'-Wformat=2',
  #'-Wformat-nonliteral',
  #'-Wformat-security',
  #'-Werror=format-security',
  #'-Werror=format=2',
  #'-Wformat-signedness',
  #'-Wignored-qualifiers',
  #'-Wimplicit-function-declaration',
  #'-Winit-self',
  #'-Winline',
  '-Wmissing-declarations',
  #'-Wmissing-format-attribute',
  #'-Wmissing-include-dirs',
  #'-Wmissing-noreturn',
  #'-Wmissing-parameter-type',
  '-Wmissing-prototypes',
  '-Wnested-externs',
  #'-Wno-discarded-qualifiers',
  #'-Wno-missing-field-initializers',
  #'-Wno-strict-aliasing',
  #'-Wno-suggest-attribute=format',
  #'-Wno-unused-parameter',
  #'-Wold-style-definition',
  #'-Woverride-init',
  #'-Wpacked',
  '-Wpointer-arith',
  #'-Wredundant-decls',
  #'-Wreturn-type',
  '-Wshadow',
  '-Wsign-compare',
  #'-Wstrict-aliasing',
  #'-Wstrict-prototypes',
  #'-Wswitch-default',
  #'-Wtype-limits',
  #'-Wundef',
  #'-Wuninitialized',
  #'-Wunused-but-set-variable',
  #'-Wwrite-strings'
  #'-Wall',
  #'-ansi',
  ]

cc = meson.get_compiler('c')

foreach arg: test_args
  if cc.has_multi_arguments(arg)
    add_project_arguments(arg, language : 'c')
  endif
endforeach

# byte order
if build_machine.endian() == 'big'
  config_h.set('WORDS_BIGENDIAN', 1)
endif

gnome = import('gnome')
i18n = import('i18n')

# Paths
rootdir = include_directories('.')

srcdir = meson.current_source_dir()
builddir = meson.current_build_dir()

prefix = get_option('prefix')

buildtype = get_option('buildtype')

bindir = join_paths(prefix, get_option('bindir'))
libdir = join_paths(prefix, get_option('libdir'))
datadir = join_paths(prefix, get_option('datadir'))
pkgdatadir = join_paths(datadir, package_name)

# Dependencies
glib_req = '>= 2.50.0'
gio_req = '>= 2.50.0'
gtk_req = '>= 3.22.0'
vte_req = '>= 0.48'
dconf_req = '>= 0.13.4'
ice_req = '>= 1.0.0'
sm_req = '>= 1.0.0'

glib_dep = dependency('glib-2.0', version: glib_req)
gtk_dep = dependency('gtk+-3.0', version: gtk_req)
gio_dep = dependency('gio-2.0', version: gio_req)
vte_dep = dependency('vte-2.91', version: vte_req)
dconf_dep = dependency('dconf', version: dconf_req)
x11_dep = dependency('x11')
sm_dep = dependency('sm', version: sm_req, required: false)

term_deps = [
  vte_dep,
  glib_dep,
  gio_dep,
  gtk_dep,
  dconf_dep,
  x11_dep,
]

build_skey = false
if get_option('skey')
  build_skey = true
  config_h.set('ENABLE_SKEY', 1, description: 'Define if s/key support is enabled')
endif

build_sm = false
ice_dep = dependency('ice', version: ice_req, required: false)
if get_option('sm') and sm_dep.found() and ice_dep.found()
  build_sm = true
  config_h.set('HAVE_SMCLIENT', 1)
  mate_submodules_dep = dependency('mate-submodules', version: '1.24.0',
    fallback: ['mate-submodules', 'mate_submodules_dep'])
  term_deps += [mate_submodules_dep]
endif

configure_file(
  output: 'config.h',
  configuration: config_h
)

subdir('help')
subdir('src')
subdir('po')

desktop_in = configuration_data()
desktop_in.set('VERSION', meson.project_version())

desktop_file_configured = configure_file(
  input: 'mate-terminal.desktop.in.in',
  output: 'mate-terminal.desktop.in',
  configuration: desktop_in,
)

desktop_file = i18n.merge_file(
  'desktop-file',
  input: desktop_file_configured,
  output: 'mate-terminal.desktop',
  type: 'desktop',
  po_dir: join_paths(srcdir, 'po'),
  install: true,
  install_dir: join_paths(
    datadir,
    'applications',
  )
)

desktop_file_validate = find_program('desktop-file-validate', required: false)
if desktop_file_validate.found()
  test(
    'validate-desktop',
    desktop_file_validate,
    args: [
      desktop_file.full_path(),
    ]
  )
endif

install_man('mate-terminal.1')

appdata_file = i18n.merge_file(
  'appdata-file',
  input: 'mate-terminal.appdata.xml.in',
  output: 'mate-terminal.appdata.xml',
  type: 'xml',
  po_dir: join_paths(srcdir, 'po'),
  install: true,
  install_dir: join_paths(
    datadir,
    'metainfo',
  )
)

appstream_util = find_program('appstream-util', required: false)
if appstream_util.found()
  test(
    'validate-appdata',
    appstream_util,
    args: [
      'validate-relax',
      '--nonet',
      appdata_file.full_path()
    ]
  )
endif

install_data(
  'mate-terminal.wrapper',
  install_mode: 'rwxr-xr-x',
  install_dir: get_option('bindir')
  )

summary = [
  '',
  'mate-terminal-@0@:'.format(meson.project_version()),
  '',
  '	prefix:                   @0@'.format(prefix),
  '	source code location:     @0@'.format(srcdir),
  '	compiler:                 @0@'.format(cc.get_id()),
  '',
  '	smclient support:         @0@'.format(build_sm),
  '	s/key support:            @0@'.format(build_skey),
  '',
]

meson.add_install_script(
  'meson_post_install.py',
  datadir,
)

message('\n'.join(summary))
